package com.TestDemo.Test1;

public class TestAbstract {

    public static void main(String[] args) {
        Son son = new Son();

        // son可使用的方法及变量
        son.f();
        son.g();
        System.out.println(son.j);
        System.out.println(son.i);

        /*
        * son就是子类对象的实例，不仅能够方位自己的属性和方法，也能访问父类的属性和方法。
        * 诸如son.i,son.j.son.fn()都是合法的。此时son.f()是Son中的f()
        * */





        Father FSon = new Son();

        FSon.f();
//        FSon.j  // 编译报错
//        FSon.g(); // 编译报错
        System.out.println(FSon.i);

        /*
        *
        * 虽然是用的Son的构造函数，但经过upcast，
        *
        * 成为父类对象的实例，不能访问子类的属性和方法。
        *
        * FSon.i,FSon.f()是合法的，而FSon.j,FSon.g()是非法的。此时访问a.f()是访问B中的f();
        * */

    }

}


class Father{
    int i = 1;
    void f(){
        System.out.println("Is father");
    }
}


class Son extends Father{
    int i = 3;
    int j = 88;
    @Override
    void f() {
        System.out.println("Son F()---");
    }

    void g(){
        System.out.println("Son G()---");
    }
}


